package d10_test;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Test {
    public static void main(String[] args) {
        //目标: 有100份礼品，小红，小明两人同时发送，当剩下的礼品小于10份的时候则不再送出，
        // 利用多线程模拟该过程并将线程的名称打印出来。并最后在控制台分别打印小红，小明各自送出多少分礼物。
        //1、拿100份礼品到程序中来
        List<String> gift = new ArrayList<>();

        //2、定义一个礼物数组(存储各种礼物)
        String[] names = {"口红", "feijibei", "biyuntao", "yanyunbang", "口红", "包包", "手表", "剃须刀"};

        //3、创建一个扫描器
        Random r = new Random();
        //4、循环将礼物随机添加到集合中去
        for (int i = 0; i < 100; i++) {
            //给每个礼物,变一个号
            gift.add(names[r.nextInt(names.length)] + (i + 1));
        }
        System.out.println(gift);//展示礼物

        //2、定义线程类, 创建线程对象, 取集合中拿礼物还给别人
        //注意共享资源是礼物,所以要把礼物,交给线程进行操作
        SendThread xm = new SendThread("小明", gift);
        xm.start();
        SendThread xh = new SendThread("小红", gift);
        xh.start();

        System.out.println(xm.getPriority());//返回线程的优先级
        System.out.println(xh.getPriority());



        //3、假设到了这里上面的"小红" 与 "小明" 没有执行完毕, 就获取他们的count,就会有bug
        //解决方案, 就是让上面的两个线程,进行插入join
        //不用担心,这个插入,是代表xm,xh先执行完毕,才能继续执行主线程,这两个子线程还是在,竞争锁
        try {
            xm.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        try {
            xh.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }//-------------其实可以只写一个join()


        //4、将每个人的发送次数进行输出
        System.out.println(xm + "发送了" + xm.getCount() + "个礼物");
        System.out.println(xh + "发送了" + xh.getCount() + "个礼物");
    }
}
